#ifndef MIND_VISION_HPP
#define MIND_VISION_HPP

#include <iostream>
#include <opencv2/opencv.hpp>
#include <chrono>
#include <thread>
#include "CameraApi.h"

#define CAMERA_NUM  2    // 摄像头数量
#define CAMERA_RECORD   // 摄像头录像

using namespace std;
using namespace cv;

class MindVision
{
public:
    MindVision();
    ~MindVision();
    void camera_init();
    void frame_update();
    inline Mat get_frame_l()const{return rgb_frame[0];}
    inline Mat get_frame_r()const{return rgb_frame[1];}
    inline CameraHandle get_hcamera()const{return hCamera[0];}
    void print_fps_callback(CameraHandle* hCamera);
    int fps_count = 0;
private:
    unsigned char*          g_pRgbBuffer[CAMERA_NUM];       // 处理后数据缓存区
    int                     iCameraCounts = CAMERA_NUM;	    // 设备个数
    int                     iStatus;			            // 函数执行返回状态值
    tSdkCameraDevInfo       tCameraEnumList[CAMERA_NUM];	// 设备列表数组
    CameraHandle            hCamera[CAMERA_NUM];	        // 相机的句柄指针
    tSdkCameraCapbility     tCapability[CAMERA_NUM];      	// 设备描述信息
    tSdkFrameHead           sFrameInfo[CAMERA_NUM];			// 图像的帧头信息，包括长宽、曝光时间等
    BYTE*			        pbyBuffer[CAMERA_NUM];			// 指向原始图像的指针
    Mat                     rgb_frame[CAMERA_NUM];          // 转换到Mat格式的图像

    cv::TickMeter tk;
    vector<int> total_frame, capture_frame, lost_frame;

    void print_info(tSdkCameraCapbility* tCapability);
};

#endif